package cn.demoncat.util.web.convert;

import cn.demoncat.util.exception.ParamRuntimeException;
import cn.demoncat.util.lang.StringUtil;
import cn.demoncat.util.lang.constant.DateConstant;
import cn.demoncat.util.lang.entity.Result;
import org.apache.commons.lang3.time.DateUtils;
import org.springframework.core.convert.converter.Converter;

import java.util.Date;

/**
 * 描述：Date 参数转换器
 *
 * @author 延晓磊
 *
 * @since 2017年7月21日
 */
public class DateConvert implements Converter<String, Date> {
 
	/**
	 * Date 参数转换
	 */
	@Override
	public Date convert(String arg) {
		if (StringUtil.isBlank(arg)) {
			return null;
		}
		try {
			// yyyy-MM-dd hh:mm:ss
			return DateUtils.parseDate(arg, DateConstant.DATE_TIME_PATTERN);
		} catch (Exception e) {
			try {
				// yyyy-MM-dd
				return DateUtils.parseDate(arg, DateConstant.DATE_PATTERN);
			} catch (Exception e1) {
				try {
					// hh:mm:ss
					return DateUtils.parseDate(arg, DateConstant.TIME_PATTERN);
				} catch (Exception e2) {
					try {
						// 时间戳
						return new Date(Long.parseLong(arg));
					} catch (Exception e3) {
						throw new ParamRuntimeException(Result.TIME_FORMAT_ERROR.getMsg(), e);
					}
				}
			}
		}
	}
}
